Comments 48
Я слышал, что в том Qt, который сейчас в гите, уже есть поддержка глобальных хоткеев.
+2
Это очень хорошо. Сделаю мою программу полностью без нативного кода
+3
Недавно навелосипедил кросплатформенную библиотеку глобальных хоткеев для 5-го Qt, uglobalhotkey, лежит тут github.com/bakwc/Pastexen/tree/master/utils + последовательность хоткеев (несколько прямее чем в Qt).
+2
В Resharper есть удобный функционал макросов: допустим, я начинаю набирать нечто вроде
Неужели для C++ нет подобных инструментов? Мне кажется, такой функционал должен присутствовать в Visual Assist X.
Преимущества перед прямым копипастом — автоматическая подстановка макросов, например имя текущего класса, или значение некого типа по умолчанию.
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.
Преимущества перед прямым копипастом — автоматическая подстановка макросов, например имя текущего класса, или значение некого типа по умолчанию.
+2
И в Visual Assist X, и во многих редакторах есть специальные сниппеты, но они в основном для конструкций, типа fori разворачивается в цикл for по i и так далее, но тут немного другая идея — именно куски (не шаблоны) полезного и частоиспользуемого кода. Допустим код пустой кнопки на тулбаре под Ubuntu Toolkit. Мне бы очень не помешал)
0
«Кусок» — это частный случай шаблона без подставляемых элементов. И обращаться к ним с помощью intellisense, имхо, гораздо удобнее чем из стороннего приложения, даже если оно вызывается через глобальный хоткей.
+2
Конечно удобнее, даже в простейшем случае вставка шаблона через ReSharper, например, попутно сократит полные имена с помощью using, отформатирует код и поставит курсор в нужное место. Да еще и будет контролировать скоуп где можно вставить этот шаблон, а где нет. Правда возможности C++ сниппетов в любой IDE к сожалению куда меньше, приходится довольствоваться тем что есть.
+2
Вы мне подали отличную идею! Я напишу для CodePaster импорт и синхронизацию с нативными сниппетсами для нескольких IDE. Действительно, в некоторых случаях вводить и заменять было бы удобнее. Можно будет рядом с полем для ключевых слов добавить поле для одного слова-сокращения, при введении которого происходит автозамена. А потом уже написать конверт таких фрагментов кода в родные для IDE форматы — я думаю это не очень сложно. Или же слегка извратиться и сделать, чтобы программа отслеживала буфер и при введении ключевых слов посылала символы в активное окно. Хотя это уже извращение.
Идея программы в том, чтобы хранить все фрагменты кода для всех языков в одном месте. А любимая IDE под рукой может быть далеко не всегда. Кроме того, вам может понадобится запомнить не кусок кода а алгоритм — например алгоритм добавления иконки для exe-шника в Qt — и его нужно просто иметь возможность быстро посмотреть — и вставить куски кода в несколько мест в несколько файлов.
Идея программы в том, чтобы хранить все фрагменты кода для всех языков в одном месте. А любимая IDE под рукой может быть далеко не всегда. Кроме того, вам может понадобится запомнить не кусок кода а алгоритм — например алгоритм добавления иконки для exe-шника в Qt — и его нужно просто иметь возможность быстро посмотреть — и вставить куски кода в несколько мест в несколько файлов.
0
Предлагаю еще более интересную идею — сниппеты можно загружать на сервис из программы, а потом искать по ним и скачивать. Чтобы в ней можно было при желании найти не только то, что записал сам, но и наработки других.
0
Отличное решение часто встречающейся задачи!
Единственное, что хотелось бы сказать — жалко, что не под Linux первая версия, чтобы попробовать придется портировать) Мне в этот придется разобраться (а в отпуске не особо хочется, принципиально), надеюсь, кто-нибудь сделает и поделится!
Единственное, что хотелось бы сказать — жалко, что не под Linux первая версия, чтобы попробовать придется портировать) Мне в этот придется разобраться (а в отпуске не особо хочется, принципиально), надеюсь, кто-нибудь сделает и поделится!
+1
Вы просто нажимаете «OK» — и ваш код уже в базе! Более того, она тут же сохранилась на жёсткий диск, чтобы не потерять данные в случае какого-либо сбоя.Мне кажется, или в вашем коде в случае сбоя во время сохранения можно потерять всё, потому что файл перезаписывается?
Логичным было бы взять тот же SQLite, где о таких вопросах уже подумали. Или поступать как некоторые редакторы (как минимум, Vim; впрочем, это не единственный вариант): сохранять файл рядом (главное: в той же файловой системе) под другим именем, а затем заменять старый файл на новый. Альтернативный от того же Vim: делать копию старого файла, переписывать старый файл, удалять копию.
+2
А зачем именно копию, почему просто не переименовать?
+3
Вы про второй случай? Затем, что если использовать вариант «переименовать старый файл, записать на его место новый, удалить переименованный старый», то вы нарвётесь на проблемы с символическими ссылками (файл перестанет быть символической ссылкой). Ещё таким образом можно убрать какие‐нибудь атрибуты файла (к примеру, A: запрещает изменение информации о времени доступа к данному файлу)¹. В большинстве случаев проблему можно обойти, но обычно проще делать именно так: копия, затем перезапись.
¹ Я говорю именно про A, а не про что‐нибудь более известное (вроде прав на запись), именно потому что что‐нибудь более известное более известно (т.е. об этом проще вспомнить, когда вы будете писать код для обхода проблемы).
¹ Я говорю именно про A, а не про что‐нибудь более известное (вроде прав на запись), именно потому что что‐нибудь более известное более известно (т.е. об этом проще вспомнить, когда вы будете писать код для обхода проблемы).
+2
Хорошо, в следующей версии исправлю этот недочёт
0
Вы бы лучше сниппеты для креатора доработали чтобы в них скрипты на js работали как в сниппетах от kate.
0
А мне кажется, что копирование кода — сильно неправильный путь. Если есть частоиспользуемые куски кода, то их нужно вынести в библиотеку или .h-файл и таскать его в разные проекты.
+4
А если я участвую в разработке каких-то крупных программ — мне и свои библиотеки в них внедрить? Работодатель далеко не всегда это одобрит.
0
Можно накопипастить из своей библиотеки в файл utils. Но это будет разовое действие, а не постоянное.
0
Тут важно смотреть на контекст использования. Обычно он подразумевает что мы не просто используем этот код, а сильно модифицируем его в последствии. Конечно, можно заложить всю гибкость в библиотеку, но часто гораздо разумнее вынести логику в отдельный слой, а его основу генерить относительно простыми сниппетами. Более сложным вариантом таких сниппетов будет генерация кода, например, scaffolding.
+1
Да вроде такой функционал много где есть в интегрированном виде. Называется он snippets/templates. В sublime text, eclipse (С++), idea, netbeans (С++) он есть из коробки, только в Visual Studiи от MS это делается с помощью платных плагинов + к тому же как написал пользователь impwx они из коробки еще умеют:
А так же возможность определить параметры сниппета и быстро их заполнить после вставки.
Ну и вообще кажется идея больше подходит для реализации как плагина, для какого-нибудь qt-creator, а не отдельного приложения.
Преимущества перед прямым копипастом — автоматическая подстановка макросов, например имя текущего класса, или значение некого типа по умолчанию.
А так же возможность определить параметры сниппета и быстро их заполнить после вставки.
Ну и вообще кажется идея больше подходит для реализации как плагина, для какого-нибудь qt-creator, а не отдельного приложения.
+3
UFO just landed and posted this here
В Emacs для этого существует yasnippet www.emacswiki.org/emacs/Yasnippet который, вроде как, позаимствован из TextMate. Но я как то так и не привык им пользоваться.
+2
Я, недавно перепробовав кучу программ, гуглящихся по слову сниппеты, остановился на молодой и бесплатной Snippets (под вин и мак).
Техподдержка, кстати, понимает по-русски, с радостью приняла к сведению мои пожелания об улучшении программы.
Как там насчёт поддержки глобальных клавиш не знаю, для навигации в ней пользуюсь мышкой.
Техподдержка, кстати, понимает по-русски, с радостью приняла к сведению мои пожелания об улучшении программы.
Как там насчёт поддержки глобальных клавиш не знаю, для навигации в ней пользуюсь мышкой.
0
Действительно это очень хорошая программа — в ней есть даже поиск и глобальные хоткеи. Однако отсутствие поддержки линукса и исходных кодов меня не радует. Хотя программа чем-то лучше моей, да. Но поскольку CodePater на Qt основан, его можно будет под Linux портировать без проблем вообще.
Взял несколько идей на заметку. В частности, вызов сниппетса по alt+space — хорошая идея.
Взял несколько идей на заметку. В частности, вызов сниппетса по alt+space — хорошая идея.
+1
Вопрос ко всем — стоит ли потом, когда мы качественно доработаем эту программу и учтём все пожелания в комментариях, писать вторую статью типа «Сверхбыстрое копирование\вставка фрагментов кода — часть 2»?
+1
UFO just landed and posted this here
Ссылка на программу под Windows битая, при попытке перейти по www.filedropper.com/codepaster10 происходит редирект на www.filedropper.com/.
0
Sign up to leave a comment.
Сверхбыстрое копирование\вставка фрагментов кода