Pull to refresh

Comments 48

Я слышал, что в том Qt, который сейчас в гите, уже есть поддержка глобальных хоткеев.
Это очень хорошо. Сделаю мою программу полностью без нативного кода
Недавно навелосипедил кросплатформенную библиотеку глобальных хоткеев для 5-го Qt, uglobalhotkey, лежит тут github.com/bakwc/Pastexen/tree/master/utils + последовательность хоткеев (несколько прямее чем в Qt).
у меня получилось при помощи этого кода запустить под linux (XFDE, Qt 5, но думаю, оно не очень DE-зависимо), куда скинуть код, чтобы Вы переделали свою программу на основе этого и выложили на github?
Да, к сожалению мака у меня нет. Но с удовольствием приму патчик, если кто-то напишет.
UFO just landed and posted this here
И как там чинится? Потому что я как раз юзаю этот код, но вот под мак ос он уже не собирается нормально.
В Resharper есть удобный функционал макросов: допустим, я начинаю набирать нечто вроде dep, и оно подсказывает мне шаблон под названием dependencyProperty, который разворачивается в:
public static readonly DependencyProperty AttachProperty = DependencyProperty.RegisterAttached(
	"Attach",
	typeof(bool),
	typeof(PasswordHelper),
	new PropertyMetadata(false, Attach)
);

public static void SetAttach(DependencyObject dp, bool value)
{
	dp.SetValue(AttachProperty, value);
}

public static bool GetAttach(DependencyObject dp)
{
	return (bool)dp.GetValue(AttachProperty);
}

Неужели для C++ нет подобных инструментов? Мне кажется, такой функционал должен присутствовать в Visual Assist X.
Преимущества перед прямым копипастом — автоматическая подстановка макросов, например имя текущего класса, или значение некого типа по умолчанию.
И в Visual Assist X, и во многих редакторах есть специальные сниппеты, но они в основном для конструкций, типа fori разворачивается в цикл for по i и так далее, но тут немного другая идея — именно куски (не шаблоны) полезного и частоиспользуемого кода. Допустим код пустой кнопки на тулбаре под Ubuntu Toolkit. Мне бы очень не помешал)
«Кусок» — это частный случай шаблона без подставляемых элементов. И обращаться к ним с помощью intellisense, имхо, гораздо удобнее чем из стороннего приложения, даже если оно вызывается через глобальный хоткей.
Конечно удобнее, даже в простейшем случае вставка шаблона через ReSharper, например, попутно сократит полные имена с помощью using, отформатирует код и поставит курсор в нужное место. Да еще и будет контролировать скоуп где можно вставить этот шаблон, а где нет. Правда возможности C++ сниппетов в любой IDE к сожалению куда меньше, приходится довольствоваться тем что есть.
Вы мне подали отличную идею! Я напишу для CodePaster импорт и синхронизацию с нативными сниппетсами для нескольких IDE. Действительно, в некоторых случаях вводить и заменять было бы удобнее. Можно будет рядом с полем для ключевых слов добавить поле для одного слова-сокращения, при введении которого происходит автозамена. А потом уже написать конверт таких фрагментов кода в родные для IDE форматы — я думаю это не очень сложно. Или же слегка извратиться и сделать, чтобы программа отслеживала буфер и при введении ключевых слов посылала символы в активное окно. Хотя это уже извращение.

Идея программы в том, чтобы хранить все фрагменты кода для всех языков в одном месте. А любимая IDE под рукой может быть далеко не всегда. Кроме того, вам может понадобится запомнить не кусок кода а алгоритм — например алгоритм добавления иконки для exe-шника в Qt — и его нужно просто иметь возможность быстро посмотреть — и вставить куски кода в несколько мест в несколько файлов.
Предлагаю еще более интересную идею — сниппеты можно загружать на сервис из программы, а потом искать по ним и скачивать. Чтобы в ней можно было при желании найти не только то, что записал сам, но и наработки других.
В QtCreator есть нативная функция для получения сниппетсов например с pastebin, правда не удобная. А наработки других можно откуда угодно выделить и через ctrl+D добавить без труда в базу проги, хоть из браузера, хоть из других программ. Или можно сделать экспорт в тот же pastebin
Отличное решение часто встречающейся задачи!
Единственное, что хотелось бы сказать — жалко, что не под Linux первая версия, чтобы попробовать придется портировать) Мне в этот придется разобраться (а в отпуске не особо хочется, принципиально), надеюсь, кто-нибудь сделает и поделится!
Спасибо) Что касается линукса и мака — CodePaster в теории должен под них без проблем собраться из исходников, однако без глобальных хоткеев — работать придётся через трей — это не так удобно
Вы просто нажимаете «OK» — и ваш код уже в базе! Более того, она тут же сохранилась на жёсткий диск, чтобы не потерять данные в случае какого-либо сбоя.
Мне кажется, или в вашем коде в случае сбоя во время сохранения можно потерять всё, потому что файл перезаписывается?

Логичным было бы взять тот же SQLite, где о таких вопросах уже подумали. Или поступать как некоторые редакторы (как минимум, Vim; впрочем, это не единственный вариант): сохранять файл рядом (главное: в той же файловой системе) под другим именем, а затем заменять старый файл на новый. Альтернативный от того же Vim: делать копию старого файла, переписывать старый файл, удалять копию.
А зачем именно копию, почему просто не переименовать?
Вы про второй случай? Затем, что если использовать вариант «переименовать старый файл, записать на его место новый, удалить переименованный старый», то вы нарвётесь на проблемы с символическими ссылками (файл перестанет быть символической ссылкой). Ещё таким образом можно убрать какие‐нибудь атрибуты файла (к примеру, A: запрещает изменение информации о времени доступа к данному файлу)¹. В большинстве случаев проблему можно обойти, но обычно проще делать именно так: копия, затем перезапись.

¹ Я говорю именно про A, а не про что‐нибудь более известное (вроде прав на запись), именно потому что что‐нибудь более известное более известно (т.е. об этом проще вспомнить, когда вы будете писать код для обхода проблемы).
Хорошо, в следующей версии исправлю этот недочёт
Вы бы лучше сниппеты для креатора доработали чтобы в них скрипты на js работали как в сниппетах от kate.
Это очень непростая задача. Хотел плагинописанием для QtCreator заняться, да всё руки никак не доходили
Вот аналогично, всё хочу взяться и сделать это. Да некогда.
Под Mac OSX есть классная программа Dash, основная фича это просмотр документации, но есть и сниппеты. Поддерживаются разные языки, подсветка, возможность вставки плейсхолдеров и управление позицией курсора после вставки из буфера обмена. Платная, но денег своих стоит.
Спасибо! Не думал что есть такой браузер документаций. Даже любимый Yii там есть)
А мне кажется, что копирование кода — сильно неправильный путь. Если есть частоиспользуемые куски кода, то их нужно вынести в библиотеку или .h-файл и таскать его в разные проекты.
А если я участвую в разработке каких-то крупных программ — мне и свои библиотеки в них внедрить? Работодатель далеко не всегда это одобрит.
Можно накопипастить из своей библиотеки в файл utils. Но это будет разовое действие, а не постоянное.
Это не удобно. Если кусков кода будет много, то навигация по файлу будет затруднена. Да и придётся его открытым постоянно держать.
Во многих IDE сниппетсы не просто так же вводят. Я как-раз предлагаю их расширение и обобщение.
Тут важно смотреть на контекст использования. Обычно он подразумевает что мы не просто используем этот код, а сильно модифицируем его в последствии. Конечно, можно заложить всю гибкость в библиотеку, но часто гораздо разумнее вынести логику в отдельный слой, а его основу генерить относительно простыми сниппетами. Более сложным вариантом таких сниппетов будет генерация кода, например, scaffolding.
Да вроде такой функционал много где есть в интегрированном виде. Называется он snippets/templates. В sublime text, eclipse (С++), idea, netbeans (С++) он есть из коробки, только в Visual Studiи от MS это делается с помощью платных плагинов + к тому же как написал пользователь impwx они из коробки еще умеют:
Преимущества перед прямым копипастом — автоматическая подстановка макросов, например имя текущего класса, или значение некого типа по умолчанию.

А так же возможность определить параметры сниппета и быстро их заполнить после вставки.

Ну и вообще кажется идея больше подходит для реализации как плагина, для какого-нибудь qt-creator, а не отдельного приложения.
Как я уже сказал в комментариях выше, можно сделать импорт в IDE-нативные сниппетсы. Но кроме сниппетсов — программа позволяет хранить заметки, последовательности действий (как вшить ресурс в exe-шник например) и т.д. — что иногда бывает очень полезно
UFO just landed and posted this here
В данном случае программу писал для себя. Но бывает подрабатываю на фриланс-основе. Если вы хороший специалист, я думаю вы сможете найти высокооплачиваемую удалённую работу не зависимо от вашего места жительства
Старайтесь быть не Qt-программистом, а C++ программистом :)
UFO just landed and posted this here
В Emacs для этого существует yasnippet www.emacswiki.org/emacs/Yasnippet который, вроде как, позаимствован из TextMate. Но я как то так и не привык им пользоваться.
Я, недавно перепробовав кучу программ, гуглящихся по слову сниппеты, остановился на молодой и бесплатной Snippets (под вин и мак).
Техподдержка, кстати, понимает по-русски, с радостью приняла к сведению мои пожелания об улучшении программы.

Как там насчёт поддержки глобальных клавиш не знаю, для навигации в ней пользуюсь мышкой.
Действительно это очень хорошая программа — в ней есть даже поиск и глобальные хоткеи. Однако отсутствие поддержки линукса и исходных кодов меня не радует. Хотя программа чем-то лучше моей, да. Но поскольку CodePater на Qt основан, его можно будет под Linux портировать без проблем вообще.
Взял несколько идей на заметку. В частности, вызов сниппетса по alt+space — хорошая идея.
Вопрос ко всем — стоит ли потом, когда мы качественно доработаем эту программу и учтём все пожелания в комментариях, писать вторую статью типа «Сверхбыстрое копирование\вставка фрагментов кода — часть 2»?
Хорошо, спасибо за поддержку, напишу, когда хорошенько доработаем прогу
UFO just landed and posted this here
Sign up to leave a comment.

Articles