Копировать/Вырезать текущую строку при отсутствии выделения

Russian main discussion
  • Author
  • Message
Offline
Posts: 47
Joined: Sat Jul 25, 2009 10:47 pm

Копировать/Вырезать текущую строку при отсутствии выделения

Post by vvch »

Ctrl+C и Ctrl+X без выделенного текста должны копировать/вырезать всю строку под курсором, как в Komodo или Sublime.
К хорошему быстро привыкаешь, как оказалось, это очень удобно, используется постоянно.
Конечно, можно это настроить скриптом (возможно, даже есть уже готовый скрипт), но мне кажется, это должно быть встроено в редактор. Это просто, интуитивно понятно, и в целом в русле логики развития Akelpad, когда, скажем, Ctrl+6 без выделения стало конвертировать слово под курсором (за что, кстати, отдельное спасибо, тоже постоянно используется!)

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

vvch wrote:Ctrl+C и Ctrl+X без выделенного текста должны копировать/вырезать всю строку под курсором, как в Komodo или Sublime.
Не должны, ИМХО.
vvch wrote:и в целом в русле логики развития Akelpad...
... - это базовый функционал (вполне приличный) + доп. плюшки, эта тянет на второе.

Code: Select all

// -"Скопировать в буфер выделенное или активную строку" Call("Scripts::Main", 1, "Script.js")
// или
// -"Скопировать в буфер выделенное или активную строку" Call("Scripts::Main", 1, "Script.js", `-act="copy"`)
//
// -"Вырезать в буфер выделенное или активную строку" Call("Scripts::Main", 1, "Script.js", `-act="cut"`)

var hWndEdit  = AkelPad.GetEditWnd();
var nStart    = AkelPad.GetSelStart();
var oSys      = AkelPad.SystemFunction();
var pAct      = AkelPad.GetArgValue("act", "copy");
var nSelStart = AkelPad.GetSelStart();
var nSelEnd   = AkelPad.GetSelEnd();
var nWordWrap;
var nLine;
var nLineIndex;
var nLineLength;

SetRedraw(hWndEdit, false);

if (nSelStart == nSelEnd)
{
  nWordWrap = AkelPad.SendMessage(hWndEdit, 3241 /*AEM_GETWORDWRAP*/, 0, 0);
  if (nWordWrap > 0)
    AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
  
  nLine = AkelPad.SendMessage(hWndEdit, 1078 /*EM_EXLINEFROMCHAR*/, 0, nStart);
  nLineIndex = AkelPad.SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/, nLine, 0);
  nLineLength = AkelPad.SendMessage(hWndEdit, 193 /*EM_LINELENGTH*/, nStart, 0);
  nEndSel = nLineIndex + nLineLength
  if (pAct == "cut")
  {
    AkelPad.SetClipboardText(AkelPad.GetTextRange(nLineIndex, nEndSel));
    AkelPad.SetSel(nLineIndex, nEndSel, 0x008 /*AESELT_LOCKSCROLL*/);
    AkelPad.ReplaceSel("");
  }
  else if (pAct == "copy")
    AkelPad.SetClipboardText(AkelPad.GetTextRange(nLineIndex, nEndSel));
  if (nWordWrap > 0)
    AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
}
else
{
  if (pAct == "cut")
  {
    AkelPad.SetClipboardText(AkelPad.GetSelText());
    AkelPad.ReplaceSel("");
  }
  else if (pAct == "copy")
    AkelPad.SetClipboardText(AkelPad.GetSelText));
}

SetRedraw(hWndEdit, true);

function SetRedraw(hWnd, bRedraw)
{
  AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
  bRedraw && oSys.Call("User32::InvalidateRect", hWnd, 0, true);
}

Offline
Posts: 47
Joined: Sat Jul 25, 2009 10:47 pm

Post by vvch »

Skif_off wrote:Не должны, ИМХО.
Обосновать своё имхо можете?
Skif_off wrote:это базовый функционал (вполне приличный) + доп. плюшки, эта тянет на второе.
Смысл разделения на базовый и дополнительный -- сохранить быстрое и небольшое по размеру ядро, вынеся функциональность, которая нужна лишь в специальных случаях, в плагины. Скажем, подсветка синтаксиса достаточно громоздка и нужна лишь программистам, поэтому разумно вынести её в плагин.
Данная же функциональность полезна независимо от того, пишет ли пользователь стихи или программы. Она не скажется на размере или быстродействии ядра. Она появляется во всё большем количестве современных редакторов, и становится уже привычной (кажется, даже в Visual Studio есть, см. также примеры выше). И наконец, в Akelpad принято, чтобы команды работы с выделением при отсутствии оного производили бы своё действие над некой уместной единицей текста по умолчанию (например, команды изменения регистра).
Поэтому не вижу ничего плохого в том, чтобы сделать базовый функционал ещё более 'приличным' :D

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

vvch wrote:Обосновать своё имхо можете?
Уже не нужно, вы за меня всё сказали:
vvch wrote:Смысл разделения на базовый и дополнительный -- сохранить быстрое и небольшое по размеру ядро, вынеся функциональность
В AkelPad скорее практикуется "недобавление в ядро" того, что сравнительно легко решается с помощью уже существующих средств - сам AkelPad+плагины. Вы уверены, что в Komodo или Sublime подобное не вынесено в отдельный модуль, а именно в ядре?
Насчёт современных редакторов/IDE: норма - предоставить возможность дополнять функционал, типа API для написания плагинов, возможности использовать скриптовые языки Python, Lua, Scheme или, как в данном случае, WSH/COM/ActiveX, запуска внешних утилит.
vvch wrote:Скажем, подсветка синтаксиса достаточно громоздка и нужна лишь программистам, поэтому разумно вынести её в плагин.
Не думаю, что критериями были громоздкость и нужды. К слову, плагин Coder и без всякого программирования позволяет, например, выделять текст цветом или типом начертания шрифта, а при некоторых дополнительных телодвижениях - структурировать текст/заметки по главам/заголовкам или любым подходящим элементам, обеспечив удобную навигацию по документу и фолдинг. Те же упомянутые стихи: возьмите названия в квадратные скобки, одно правило из ini.coder и, опа, в панели со стуруктурой удобрый список.
vvch wrote:Данная же функциональность полезна независимо от того, пишет ли пользователь стихи или программы. Она не скажется на размере или быстродействии ядра. Она появляется во всё большем количестве современных редакторов, и становится уже привычной
И тут уже, можно сказать, есть: вот прямо над вашим сообщением вариант реализации :) Если подходящего решения не было предложено ранее (не искал, тупо взял скрипт для выделения строки под курсором и немного подправил).
vvch wrote:(кажется, даже в Visual Studio есть, см. также примеры выше)
Сравнивать с полноценной, громоздкой IDE? :)
vvch wrote:И наконец, в Akelpad принято, чтобы команды работы с выделением при отсутствии оного производили бы своё действие над некой уместной единицей текста по умолчанию (например, команды изменения регистра).
Например, если не изменяет память, исторически между командами изменения регистра и "принято" прошли годы :)

В общем, допускаю, что перебарщиваю или даже попахивает ретроградством, но рассуждаю, исходя из простого: перепробовал кучу редакторов (а из бесплатных и не умерших *цать лет назад перепробовал все), AkelPad - самый быстрый, сравнительно не требовательный к ресурсам, с поддержкой юникода, достаточно функциональный, с немалой возможностью оный расширить, и хотелось бы, чтобы он таким и оставался. Поэтому первая мысль не "вау, круто, привык где-то там", а "как реализовать сейчас тем, что имеем" :) Хотя удаётся не всё, конечно же.


Ну, в любом случае, у нас тут не семь нянек, решать Instructor.

P.S. Вот бы ещё плагин Scripts завести под Wine...

Offline
Posts: 47
Joined: Sat Jul 25, 2009 10:47 pm

Post by vvch »

Skif_off wrote:уверены, что в Komodo или Sublime подобное не вынесено в отдельный модуль
Уверен. При том, что оба поддерживают расширения и скрипты.
Skif_off wrote:Сравнивать с полноценной, громоздкой IDE?
Я не сравнивал, читайте внимательнее.
Skif_off wrote:исторически между командами изменения регистра и "принято" прошли годы
Исторически эти команды так работали с самого начала, только заменяли сразу весь текст, что было неудобно и чревато ошибками. А если следовать вашей логике, их и добавлять не стоило: ведь можно обойтись скриптами.
Skif_off wrote:и хотелось бы, чтобы он таким и оставался
Не вижу, как данная фича могла бы ему в этом помешать.
Не нашёл в вашем длинном тексте ни одного аргумента против. Очевидно, что возможность реализовать скриптом таковым не является. Многие фичи ядра можно было бы реализовать скриптом.

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

vvch wrote: Не вижу, как данная фича могла бы ему в этом помешать.
Фича там, фича тут, добавим ещё часики, свистелки и прочие непотребства и в итоге получим что? Правильно, неповоротливого монстра...

Почему-то у всех вновь прибывших с других редакторов, возникают идеи расширения штатной оснастки редактора - не знаете почему? :)

А вообще, Ctrl+X Ctrl+C - виндовые хоткеи вырезать и скопировать и нигде у них подобного функционала не встречается, штатно...

И кроме того, AkelPad - редактор с открытым исходным кодом... хочется фичу - реализуйте и предложите эту реализацию автору... никто ведь не запрещает этого.

Offline
Posts: 47
Joined: Sat Jul 25, 2009 10:47 pm

Post by vvch »

YuS wrote:добавим ещё часики, свистелки и прочие непотребства
Добавлять непотребства я не предлагал, и считаю это неразумным. Их добавление никак не вытекает из моего предложения. А почему я считаю конкретно эту фичу разумной, я выше подробно обосновал. И даже сотня подобных фич ядро не утяжелит.
Кстати, часики там уже есть (insert date), и никто вроде не жалуется, хотя это ведь тоже можно было бы сделать скриптом.
YuS wrote:у всех вновь прибывших с других редакторов
Я вообще-то пользуюсь Akelpad с первой версии (именно потому, что искал компактный, не перегруженный наворотами редактор). И даже на этом форуме зарегистрирован дольше вас.
YuS wrote:возникают идеи расширения штатной оснастки редактора - не знаете почему?
Почему конкретно у меня возникла такая идея, я выше подробно разъяснял.
А вот почему, интересно, вновь присоединившиеся к дискуссии не считают нужным ознакомиться с тем, что говорилось ранее, даже если там всего 5 постов?
YuS wrote:нигде у них подобного функционала не встречается, штатно...
Выше, опять же, приводились конкретные примеры. И это лишь некоторые.
YuS wrote:хочется фичу - реализуйте и предложите эту реализацию автору... никто ведь не запрещает этого.
Я что-то не понял: вы намекаете, что просто предложить идею для реализации кто-то уже запрещает??!

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

vvch wrote: Добавлять непотребства я не предлагал, и считаю это неразумным. Их добавление никак не вытекает из моего предложения.
Ну, а 26 страниц в этом топике, конечно, ни о чем... только вот Ваше, одно единственное, предложение имеет право на существование, так что ли? :)
vvch wrote: А почему я считаю конкретно эту фичу разумной, я выше подробно обосновал.
Обоснование наличием фичи в других редакторах - так себе аргументация. Тут необходимо обоснование того, почему без неё никак не обойтись пользователям...
vvch wrote: Я вообще-то пользуюсь Akelpad с первой версии (именно потому, что искал компактный, не перегруженный наворотами редактор). И даже на этом форуме зарегистрирован дольше вас.
Вот только не надо доставать измерительные инструменты и начинать мериться непонятно чем...
Имелась в виду не дата регистрации, а присутствие на этом форуме... ну и естественно использование AP.
vvch wrote: А вот почему, интересно, вновь присоединившиеся к дискуссии не считают нужным ознакомиться с тем, что говорилось ранее, даже если там всего 5 постов?
А кто Вам сказал, что не ознакомился? Просто, там аргументация строится на шатком фундаменте...
Нет, Вы не подумайте, что тут все настроены против Вашего предложения. И если вам показалось, что я, например, против, то это не так, это всего лишь дискуссия. Просто в Вашем предложении "режет глаз" слово "должен"...
Но как бы то ни было, Решение, в любом случае, будет принимать автор.
vvch wrote: Выше, опять же, приводились конкретные примеры. И это лишь некоторые.
Говорю же, не надо строить аргументацию на том, что где-то, в какой-то программе это присутствует и поэтому такой же функционал должен присутствовать в AP.
Думаю, что такие слова, как должен или обязан, в нашей дискуссии лишние. Лучше приведите статистику какую-нибудь, как часто используется это клавиатурное сочетание или ещё какую-нибудь другую аргументацию... это ведь Ваше предложение.
vvch wrote: Я что-то не понял: вы намекаете, что просто предложить идею для реализации кто-то уже запрещает??!
Нет, я всего лишь намекаю, что автор проектом занимается на безвозмездной основе и занимается им, скорее всего, в свободное время. Поэтому, требовать что-либо от него, не совсем вежливо. Есть возможность собственноручной реализации - реализуйте, помогите, а если нет такой возможности, то просто ожидайте - возможно, функционал появится в будущих версиях.

Offline
Posts: 47
Joined: Sat Jul 25, 2009 10:47 pm

Post by vvch »

YuS wrote:одно единственное, предложение имеет право
это ваши фантазии, я даже близко ничего подобного не говорил
YuS wrote:Обоснование наличием фичи в других редакторах ... в какой-то программе это присутствует и поэтому такой же функционал должен присутствовать ...
и это фантазии, ссылки на редакторы приводились с другой целью, в каждом случае указано, с какой
YuS wrote:кто Вам сказал, что не ознакомился
увы, догадывался, что мог всё же ознакомиться, но считал долгом до последней возможности предполагать в собеседнике способность понимать прочитанное
YuS wrote:если вам показалось, что я, например, против, то это не так, это всего лишь дискуссия
И что вам всего лишь подискутировать, тоже уже догадался.
Я бы предпочёл беседовать с кем-нибудь, кто против (или за), и кто в состоянии это обосновать, или хотя бы просто сказать что-то по существу вопроса. Вполне допускаю, что могли бы найтись разумные возражения.
YuS wrote:... не совсем вежливо ... не надо строить аргументацию... ещё какую-нибудь другую аргументацию ... там аргументация строится на шатком ... Тут необходимо ... Лучше приведите ... реализуйте и предложите ... не надо доставать ... реализуйте, помогите ... просто ожидайте ...
Звиняйте, но конкретно с вами обсуждать вопросы вежливости, а тем более, способы построения аргументации, и что мне надо или не надо делать, считаю бессмысленным. Тем более, на этом форуме, который предназначен совсем для другого. Уверен, в интернете немало площадок, обитателей которых вы могли бы осчастливить своими мыслями на эту тему.
YuS wrote:"режет глаз" слово "должен" ... такие слова, как должен или обязан ... требовать что-либо от него
Шли бы вы, любезнейший, в библиотеку, взяли словарь (скажем, Ефремовой), и ознакомились со значением слова "должен". Причём, со всеми его значениями, а не только с примитивно-финансовым. А заодно со значением слов "мне кажется" из той же реплики.

Что касается автора программы, уверен, у него с русским языком всё в порядке, и он поймёт, что я от него ничего не требовал (и не просил даже).

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

vvch
Придите в себя! Ничего хорошего вы откровенным хамством не добьетесь. Если, конечно, не ставите целью игнорирование себя максимально широким кругом лиц.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

vvch wrote:
Skif_off wrote:Сравнивать с полноценной, громоздкой IDE?
Я не сравнивал, читайте внимательнее.
Вы специалист по русскому языку: как ещё воспринять аргумент "даже в Visual Studio есть"?
vvch wrote:Не вижу, как данная фича могла бы ему в этом помешать.
Не нашёл в вашем длинном тексте ни одного аргумента против.
Ниже YuS развернул мысль, а стоило мне. Хотелка здесь, хотелка там и каждая - прямо край, без них ну никак. И что в итоге? Эта фича не помешает, другая фича... И я бы понял, если бы не было иного способа, но он есть, причём мне, ландышу, понадобилось совсем немного времени (допускаю, наши "монстры" Instructor и KDJ, с лёгкостью напрямую использующие вызовы WinAPI и чтение/запись в память, могут предложить более элегантное решение). А вот, например, такая просьба - совсем другое дело: иначе решать сложнее, профит налицо, скриптом (JScript/VBScript)/плагином не решишь.

P.S.
vvch wrote:Шли бы вы, любезнейший, в библиотеку, взяли словарь (скажем, Ефремовой), и ознакомились со значением слова "должен".
Ну, вы же сами тыкали в лицо датой регистрации :) Действительно режет глаз, тут как-то редко оно звучит (и синоним тоже).

Offline
Posts: 47
Joined: Sat Jul 25, 2009 10:47 pm

Post by vvch »

opk44 wrote:вы откровенным хамством не добьетесь
Даже любопытно стало. Если упоминание о предназначении ветки форума для Вас -- хамство, что же у Вас считается вежливостью. Вот это "Верунчик, сама-сама-сама", "Зачем тень на плетень наводить", "Придите в себя", "откровенным хамством"?
Хотите добиться, чтобы я до такого уровня опустился? Не дождётесь.
Хотя...
opk44 wrote:не ставите целью игнорирование себя максимально широким кругом лиц
вот лично Вас, opk44, попросил бы игнорировать меня всем максимально широким кругом Вашего лица. И если добиться от Вас этого можно только откровенным хамством, можете даже считать, что вышеприведённые фразы бросили не Вы мне, а я Вам.

Offline
Posts: 47
Joined: Sat Jul 25, 2009 10:47 pm

Post by vvch »

Skif_off wrote:Вы специалист по русскому языку: как ещё воспринять аргумент "даже в Visual Studio есть"?
Ваша ирония неуместна. Смысл слов, которые используешь, надо знать не только специалисту. А тем более если решил "потыкать в лицо" кому-либо своей надуманной интерпретацией чужих слов.

Ссылка на VS приводилась чтобы предупредить напрашивающееся возражение, что "Ctrl+X Ctrl+C - виндовые хоткеи вырезать и скопировать и нигде у них подобного функционала не встречается, штатно", поэтому такое поведение может быть непривычно и неожиданно для пользователя.
И разумеется, тут же нашёлся мыслитель, подобное возражение выдвинувший, и на голубом глазу уверяющий, что ознакомился со сказанным ранее. Что ж, верю: такому и 10 раз прочитать -- не поможет.

Глупо приписывать мне "обоснование наличием фичи в других редакторах". В Visual Studio много хорошего, но я же не предлагал тащить оттуда всё это только потому, что "в какой-то программе это присутствует и поэтому такой же функционал должен присутствовать".
Skif_off wrote:Ниже YuS развернул мысль, а стоило мне.
У вас и правда получается несколько лучше, но по сути, я всё уже написал в ответе YuS.
Skif_off wrote:хотелка там и каждая - прямо край, без них ну никак.
очевидное передёргивание, я в первой же своей реплике указал, что можно обойтись скриптом
Skif_off wrote:И я бы понял, если бы не было иного способа ... В AkelPad скорее практикуется "недобавление в ядро" того, что сравнительно легко решается с помощью уже существующих средств
Я уже приводил множество примеров того, что было добавлено в ядро, хотя легко может быть реализовано скриптами.
Skif_off wrote:совсем другое дело: иначе решать сложнее, профит налицо, скриптом (JScript/VBScript)/плагином не решишь.
Ну, почему же не решишь. Не знаю, поддерживает ли эту опцию VBScript, но если речь о PCRE, можно использовать PerlScript. И куча других вариантов, например, плагин на C++ с libpcre.
'Профит' тоже под сомнением: эта фишка появилась только в perl 5.10 (2007), до этого без неё 20 лет обходились даже в perl (и сейчас подавляющее большинство обходится), а это, как я понял, у вас считается важным аргументом («исторически между командами изменения регистра и "принято" прошли годы»). Это я не к тому, что она не нужна, а к тому, что ваши аргументы можно повернуть против практически любого нововведения, они бессмысленны.
Skif_off wrote:вы же сами тыкали в лицо датой регистрации
Никому я в лицо не тыкал, лишь поставил на место любителя подискутировать, намекнувшего, что я "вновь прибывший с других редакторов" -- читайте текст полностью. Дата регистрации не даёт каких-то преимуществ или привилегий, чтобы ей можно было в лицо тыкать (хотя у вас, видимо, иное мнение). Да и не любитель я тыкать чем-либо в лицо.
Skif_off wrote:Действительно режет глаз, тут как-то редко оно звучит (и синоним тоже).
Ну хорошо, если словарь слабо́, попробуйте поиск по форуму (ссылка вверху страницы) по этому слову. Для этого не нужно быть давно зарегистрированным. Почитайте контекст, в котором это слово употребляется, и подумайте хорошенько, действительно ли в каждом из 483 "редких" случаев оно выступает синонимом слова "обязан", и означает требование к автору программы что-то немедленно выполнить?
Вы удивитесь, но в результатах поиска будет немало и ваших реплик, и засевшего за словари любителя дискуссий. Если это не троллинг, и вы правда веруете, что у этого слова есть только такое значение, что ж вы так разбрасываетесь им?

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Мне тоже не нравится тон, заданный vvch, но, по моему, в ядро или плаги стоит добавлять ту функциональность, которая при реализации скриптом даёт тормоза. К примеру, выделение текста - 2-клик выделяет слово, а 3-клик - строку или предложение. Такое поведение можно реализовать резидентным скриптом... что плохо (на все случаи жизни задолбаешься вешать скрипты, да и раздражает это, когда частовыполняемые действия производятся с почти секундной задержкой), потому и сделали опцию.
Для таких штук лучше делать опции. Ну или для основных комбинаций клавиш тоже, если бы это было массово востребовано. А так...

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

VladSh wrote:К примеру, выделение текста - 2-клик выделяет слово, а 3-клик - строку или предложение. Такое поведение можно реализовать резидентным скриптом... что плохо (на все случаи жизни задолбаешься вешать скрипты, да и раздражает это, когда частовыполняемые действия производятся с почти секундной задержкой), потому и сделали опцию.
О какой опции речь? Знаю только флаг для MouseOptions, запрещающий выделение строки тройным кликом. Наверное, было до того, как начал пользоваться, двойной/тройной клик много где работает (сам, кажется, в Word такое начал использовать, так же привычно и в AkelPad пользовал иногда).

Для Ctrl+C/Ctrl+X резидентный скрипт по идее не нужен, тут хук на мышь (или как там оно ловилось?) ни к чему, плагином Hotkeys вызывать и всё.
Post Reply