Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Сверхбыстрое копированиевставка фрагментов кода

Anna | 25.06.2014 | нет комментариев

Постоянно программируя на C /Qt, я подметил, что было бы комфортнее беречь где-нибудь свои отрывки кода и иметь к ним стремительный доступ. Безусловно же, я принялся искать и нашёл уйма готовых программ-органайзеров и сайтов. Я перепробовал их, но меня всё это не устроило.

Хотелось именно стремительного доступа — а значит по глобальным хоткеям. Дабы нажал — ввёл слова в поиск — получил код. Но такими функциями владели каждого две программы, а они были платными и не кроссплатформенными.

Следственно я взялся написать свою программу на Qt. Она оказалась настоль комфортной, что я теснее не представляю свой кодинг без неё и безусловно же решил её опубликовать — внезапно кому ещё сгодится? Под катом расскажу о загвоздках и задачах, которые пришлось решить, выложу свой навык, а также обзор самой программы и её начального кода.

История разработки

Для начала я решил — программа должна быть, крошечной, комфортной и юркой. А значит — следует разместить программу в трее, Дабы не мешалась на панели задач. Благо что Qt предоставляет для этого комфортное кроссплатформенное решение в виде класса QSystemTrayIcon. Также программа должнанепременно трудиться на глобальных хоткеях. Вот здесь появилась задача! Дело в том, что Qt, к сожалению, из коробки не поддерживает их. На то есть библиотека libqxt, которую я крайне удачно применял примерно год под Qt 4.8. Впрочем под Qt 5 её по неясной мне причине ещё типично не доработали (на тот момент) и под Win7 она собираться ну никак не хотела — и я кинул эту затею. Взамен этого вставил самую капельку нативного кода — вызов winApi функции RegisterHotKey. Это исключительная нативная вставка в программе — и я думаю что будет вовсе легко доработать её под Linux либо Mac.

Сами куски кода я решил сберегать в XML-базе данных. Может это и не лучшее решение, но оно пока абсолютно справляется с задачей. Да и вообще привык я к нему.

В качестве основы для редактора я взял, безусловно же, QTextEdit. Здесь меня ожидал славный сюрприз — код, скопированный из QtCreator — копируется как HTML с разметкой, а следственно — с подсветкой синтаксиса. Здесь же надобность писать встроенную подсветку синтаксиса для C Qt отпала сама по себе. QtCreator имеет дюже резкую подсветку синтаксиса, исключительно если её настроить под себя.

Дальше, когда теснее была вероятность вставить в окошко код и он уходил в базу, а после этого в файл xml, встал вопрос о том, как его комфортно и стремительно получить. Для этого я написал небольшой поисковик, тот, что ищет куски кода, где встречаются все слова, указанные через пробел. Пока его абсолютно хватает. В моей индивидуальной базе теснее около 100 фрагментов кода и всё равно среди них я отменно ориентируюсь.

Также сделал кейворды. Ну как же без них? Поиск идёт не только по основному коду, но и по ним тоже. В кеях дозволено указать языки программирования, к которым относится данная паста, скажем «c ,qt» либо «qml,js». Если в итоге поиска возникли фрагменты кода из нескольких языков, дозволено дифференцировать их, добавив ключевое слово-язык.

Дорабатывая программу, нарисовал в GIMPe логотип — фигурные скобочки. Легко и ясно.

Обзор программы

Можете скачать Windows-дистрибутив программы тут либо собрать её из исходников, скачав их с github. Только распаковывайте их не на рабочий стол, как это делают многие. Дистрибутив совместно со всеми dll весит 16 МБ в запакованном виде и 40 в распакованном — Qt5 гораздо разжирел и даже простейшая программа требует тащить за собой целую массу библиотек. Но я думаю что это не задача, тем больше что оно никак не сказывается на скорости работы программы.

Распакуйте программу в всякую папку на диске и запустите. Она сделает в своей папке файл конфигурации config.xml, а потом, при сохранении, чистую базу данных для вашего кода base.xml. Собственно как выглядит основное меню — вы можете увидеть на скрине в заголовке статьи. Интерфейс программы пока что каждый на английском, Дабы не было задач со сборкой на некоторых системах — сообщения и подписи пока-что в исходниках.

Добавление нового фрагмента кода осуществляется по глобальномухоткею ctrl D, а поиск — по win V. Вы можете кинуть в меня камень за такие «всеобщии» хоткеи, но эксперименты показали что они самые комфортные. Да, допустимо вы привыкли по ctrl D отправлять код из QtCreator куда-либо. Если это так критично, можете зайти в конструктор класса CodePaster и поменять там хоткеи на те, которые вам желательны. В последующем это дозволено будет сделать через GUI.

Продолжим. Возможен, вы написали какой-то комфортный алгорифм, либо освоили новую конструкцию языка, которую нет мечты печатать всякий раз. Вы легко выделяете ваш блок кода в вашей любимой IDE (скажем в креэйторе) — и копируете как обыкновенно через ctrl C. Здесь же будет комфортно и вовсе рядом — не отпуская ctrl — нажать на D. Вылезет окно поверх вашей IDE — и код теснее сам прыгнет в него! Программа в механическом режиме читает буфер обмена, вставляя из него код. Ещё здесь есть ещё 2 небольшие фичи — вставляется подпись перед кодом в виде комментария “//”, а также у самого кода убираются лишние отступы. Т.е. если вы скопировали его из середины программы, то он сдвинется налево до упора.

Вы легко нажимаете «OK» — и ваш код теснее в базе! Больше того, она здесь же сохранилась на жёсткий диск, Дабы не утратить данные в случае какого-либо сбоя.

Дальше — когда вам захотелось стремительно скопировать данный код — нажимаете win ctrl. Отчего именно его? Мне он кажется комфортным вариантом и нигде не задействован. Вы увидите небольшой поисковик по коду, и теснее оттуда сумеете скопировать надобные вам фрагменты. Что касается самого поисковика — то у всякого куска кода есть контекстное меню. Вы можете удалить его из базы, можете отредактировать, а можете посмотреть его свойства.


Как видите, фрагменты кода разделяются через “—”, у всякого есть свой id, а также мелкие плюшки — программа запоминает дату добавления и сколько раз он был скопирован.

Пришлось немножко потрудиться, Дабы сопоставить определенный блок текста внутри QTextEdit некоторому объекту Code — при обновлении поиска формируется «карта» — лист из особых объектов, всякий из которых хранит исходную и финальную позицию в QTextEdit и указатель на объект кода, тот, что этой области соответствует.

Между прочим — прогу дозволено применять не только для кода, а вообще для всякого текста. Скажем я крайне удачно забил туда свои почтовые ящики и телефон, копирую их когда нужно. Получается что-то типа блокнота с стремительным доступом и поиском.

Примеры

Приведём легкой пример применения программы — если вам внезапно потребовалось бросить в вашей программе мессаджбокс для отладки (именно его, а не итог qDebug) — предварительно подготовив код, вы легко набираете win V и вбиваете «mes» — этого довольно, Дабы обнаружить необходимый кусок кода и скопировать его. Вы потратите одно нажатие хоткеев, комплект 3 символов, Enter (тот, что в последующем дозволено будет убрать), и выделение-копирование. А сейчас дайте сравним — сколько времени вы потратите, Дабы скопировать его из того же ассистанта? Даже если он на глобальном хоткее — вам придётся через выделение либо клавиш получить фокус для строки поиска, ввести туда «mess», предпочесть необходимый класс мышкой (!), промотать вниз до того места где есть пример (если он есть) и только тогда скопировать его. Это как минимум в 2 раза дольше. Qt Assistant — это легко безупречная документация, впрочем для копирования-вставки непрерывно используемых кусков кода он не подходит.

Какие варианты вы ещё предложите? Заходить всякий раз на сайт pastebin и искать там? Это тоже лишние задержки. Вводить в гугле по 100 раз одни и те же запросы? А чай множество программистов, с которыми я общался на эту тему — так и делали — они всякий раз всё гуглили. Но чай один раз нашёл — дозволено сберечь в какой-нибудь «кэш» для стремительного доступа, изменив если нужно — и применять на здоровье! Этим кэшем и должна быть программа, отлично интегрированная с системой для большего комфорта.

Приведём иной пример. Я Зачастую сижу на форуме prog.org.ru и непрерывно нахожу либо получаю много отличных решений различных маленьких задач. Скажем, как с поддержкой QSettings добавить программу в автозагрузку Windows. Либо как динамически подгрузить ui-форму. Там целые алгорифмы. Всякий раз искать то нашёл один раз — это не удобно. Отличные и прекрасные решения отрадно сберегать для себя для грядущего применения.

Ещё один пример — я один раз сберег код для bat-файла, тот, что добавляет переменную в windows environment variables. Когда он бывает необходим — легко копирую его в командную строку взамен применения неудобного GUI.

Вы безусловно также можете предложить сберегать фрагменты кода в файлы, впрочем как только встанет вопрос о стремительном доступе и поиске, а также об комфортной организации таких файлов — вы увидите, что это не самое лучшее решение. Крупные куски кода — целые библиотеки и классы — безусловно же стоит беречь именно так, но речь идёт о маленьких фрагментах, которые мы Зачастую используем.

Если вы трудитесь сразу с несколькими языками программирования — превосходства применения такой программы станут ещё больше значительными. Вы можете позабыть как выглядит та либо другая конструкция на определённом языке — и через поиск легко припомнить.

Обзор начального кода

Начальный код я писал жёстко по эталону Qt Coding Style. Подчас применял конструкции С 11. Я думаю при его чтении задач не возникнет. Все окна возведены на основе виджетов, впрочем потом планирую перевести их на QML.

Вообще — не судите сурово. Это мой 1-й публичный план и я верю что хоть кому-то сгодится если не прога, то те моменты, которые я высказал тут. Если прога окажется реально пригодной и вы плюсуете — то могу её доработать. В планах — сделать её ещё комфортнее (идеи есть), подсветку синтаксиса для других языков и поддержку хоткеев для LinuxMac.

Также не исключаю, то что где-то в статье либо в коде есть опечатки иили ошибки. Рад буду принять здавую критику.

Так что — ожидаю ваших отзывов!

 

Источник: programmingmaster.ru

 

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB