AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

гиперссылки
Goto page Previous  1, 2
 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
VladSh



Joined: 29 Nov 2006
Posts: 2584
Location: Киев, Русь

PostPosted: Thu Aug 23, 2012 11:25 am    Post subject: Reply with quote

KeepGoing
Можно взять CaretSelect.js, положить его в \Scripts\Include, а в \Scripts\ создать файл, к примеру LinkCaretOpen.js

Code:
if (! AkelPad.Include("CaretSelect.js")) WScript.Quit();

var URL = getLinkCaret();
if (URL) {
   if (URL.charAt(0) != "\\")   {   //не сетевой путь в файловой системе
      if (URL.indexOf(":\\") == -1 && URL.indexOf(":/") == -1)
         URL = "http://" + URL;
   }
   
   var WshShell = new ActiveXObject("WScript.Shell");
   WshShell.Exec('rundll32.exe shell32, ShellExec_RunDLL "' + URL + '"');
}

Открывает почти как Вы хотите. Почти - если в браузере была текущая вкладка, то при открытии ссылка откроется в фоне, а фокус останется на текущей вкладке (у меня в Опере так).

Можно было бы использовать функцию getLinkCaret() + скрипт openFileIn.js Infocatcher'а, но он к сожалению поддерживает только передачу параметров в виде аргументов.

Instructor
Очень не хватает в AEGI_ поиска начала и конца ссылки, находящейся под курсором.
Back to top
View user's profile Send private message Visit poster's website
VladSh



Joined: 29 Nov 2006
Posts: 2584
Location: Киев, Русь

PostPosted: Thu Aug 23, 2012 11:40 am    Post subject: Reply with quote

Infocatcher wrote:
А меню вызывать с клавиатуры.
А как его вызвать с клавиатуры? Перепробовал все комбинации ContextMenu::Show, либо вылетает главное меню, либо требует обязательного указания подменю, находящегося ContextMenu::Show, меню же целиком (в данном случае меню ссылок) не выводит.
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1570

PostPosted: Thu Aug 23, 2012 12:06 pm    Post subject: Reply with quote

VladSh
Да стандартно, или кнопкой специальной, или Shift+F10.
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2584
Location: Киев, Русь

PostPosted: Thu Aug 23, 2012 12:58 pm    Post subject: Reply with quote

Infocatcher
"стандартно, или кнопкой специальной" на подходит по условиям задачи, надо работать чисто с клавиатуры.
Жму по Shift+F10, меню вылетает, чтобы выбрать нужный пункт по комбинации клавиш надо жать Alt+0, но уже при нажатии Alt меню сбрасывается (старая баго-фича, о которой давно писали и просили, чтобы меню не сбрасывалось).
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1570

PostPosted: Thu Aug 23, 2012 1:07 pm    Post subject: Reply with quote

VladSh
Так это у всех меню так.
Alt+Ф => Файл
О => Открыть

При открытом меню нажимать Alt уже не надо.
Back to top
View user's profile Send private message
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Thu Aug 23, 2012 1:17 pm    Post subject: Reply with quote

Магическая кнопка между правой клавишей Win и правым Ctrl Wink
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2584
Location: Киев, Русь

PostPosted: Thu Aug 23, 2012 1:41 pm    Post subject: Reply with quote

Infocatcher, Fr0sT
Работает. Прикольно Smile
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5174

PostPosted: Thu Aug 23, 2012 2:19 pm    Post subject: Reply with quote

KeepGoing
OpenLinkUnderCaret.js
Code:
if (SelectLinkUnderCaret(AkelPad.GetEditWnd()))
  AkelPad.Exec('rundll32.exe shell32,ShellExec_RunDLL "' + AkelPad.GetSelText() + '"');

function SelectLinkUnderCaret(hWndEdit)
{
  var lpSel;
  var lpCaret;
  var bSelected=false;

  if (lpCaret=AkelPad.MemAlloc(_X64?24:12 /*sizeof(AECHARINDEX)*/))
  {
    AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, 5 /*AEGI_CARETCHAR*/, lpCaret);
    if (lpSel=AkelPad.MemAlloc(_X64?56:28 /*sizeof(AESELECTION)*/))
    {
      if (AkelPad.SendMessage(hWndEdit, 3149 /*AEM_INDEXINURL*/, lpCaret, lpSel))
      {
        AkelPad.SendMessage(hWndEdit, 3126 /*AEM_SETSEL*/, lpCaret, lpSel);
        bSelected=true;
      }
      AkelPad.MemFree(lpSel);
    }
    AkelPad.MemFree(lpCaret);
  }
  return bSelected;
}
Back to top
View user's profile Send private message Send e-mail
VladSh



Joined: 29 Nov 2006
Posts: 2584
Location: Киев, Русь

PostPosted: Thu Aug 23, 2012 3:51 pm    Post subject: Reply with quote

Instructor
Здорово!
А можно ли ещё как-то не выделяя ссылку? Т.е. получить границы, текст ссылки, а затем открыть?
Back to top
View user's profile Send private message Visit poster's website
KeepGoing



Joined: 15 Sep 2011
Posts: 37

PostPosted: Thu Aug 23, 2012 5:43 pm    Post subject: Reply with quote

Instructor,
у меня OpenLinkUnderCaret.js, повешенный на хоткей, только выделяет ссылку, но в браузере ссылка не открывается
Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1263
Location: Poland

PostPosted: Thu Aug 23, 2012 6:09 pm    Post subject: Reply with quote

VladSh
OpenLinkUnderCaretWithoutSelection.js
Code:
var sLink=GetLinkUnderCaret(AkelPad.GetEditWnd());
if (sLink)
  AkelPad.Exec('rundll32.exe shell32,ShellExec_RunDLL "' + sLink + '"');

function GetLinkUnderCaret(hWndEdit)
{
  var lpSel;
  var lpCaret;
  var nLinkStart;
  var nLinkEnd;
  var sLink;

  if (lpCaret=AkelPad.MemAlloc(_X64?24:12 /*sizeof(AECHARINDEX)*/))
  {
    AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, 5 /*AEGI_CARETCHAR*/, lpCaret);
    if (lpSel=AkelPad.MemAlloc(_X64?48:24 /*sizeof(AESELECTION)*/))
    {
      if (AkelPad.SendMessage(hWndEdit, 3149 /*AEM_INDEXINURL*/, lpCaret, lpSel))
      {
        nLinkStart=AkelPad.SendMessage(hWndEdit, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpSel);
        nLinkEnd=AkelPad.SendMessage(hWndEdit, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpSel + (_X64?24:12));
        sLink=AkelPad.GetTextRange(nLinkStart, nLinkEnd);
      }
      AkelPad.MemFree(lpSel);
    }
    AkelPad.MemFree(lpCaret);
  }
  return sLink;
}
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2584
Location: Киев, Русь

PostPosted: Thu Aug 23, 2012 7:47 pm    Post subject: Reply with quote

KDJ
Thank you! Now there is both variants.

Edited:
Here's what obtained: CaretSelect.js.
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5174

PostPosted: Fri Aug 24, 2012 4:22 am    Post subject: Reply with quote

KeepGoing wrote:
Instructor,
у меня OpenLinkUnderCaret.js, повешенный на хоткей, только выделяет ссылку, но в браузере ссылка не открывается
А так?
OpenLinkUnderCaret.js
Code:
var oSys=AkelPad.SystemFunction();
var hWndEdit=AkelPad.GetEditWnd();
var crUrl;

if (crUrl=GetLinkUnderCaret(hWndEdit))
  oSys.Call("shell32::ShellExecute" + _TCHAR, hWndEdit, "open", AkelPad.GetTextRange(crUrl.cpMin, crUrl.cpMax), 0, 0, 1 /*SW_SHOWNORMAL*/);

function GetLinkUnderCaret(hWndEdit)
{
  var lpRange;
  var lpCaret;
  var crUrl=[];
  var bResult=false;

  if (lpCaret=AkelPad.MemAlloc(_X64?24:12 /*sizeof(AECHARINDEX)*/))
  {
    AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, 5 /*AEGI_CARETCHAR*/, lpCaret);
    if (lpRange=AkelPad.MemAlloc(_X64?48:24 /*sizeof(AECHARRANGE)*/))
    {
      if (AkelPad.SendMessage(hWndEdit, 3149 /*AEM_INDEXINURL*/, lpCaret, lpRange))
      {
        crUrl.cpMin=AkelPad.SendMessage(hWndEdit, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpRange);
        crUrl.cpMax=AkelPad.SendMessage(hWndEdit, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpRange + (_X64?24:12) /*offsetof(AECHARRANGE, ciMax)*/);
        bResult=true;
      }
      AkelPad.MemFree(lpRange);
    }
    AkelPad.MemFree(lpCaret);
  }
  if (bResult)
    return crUrl;
  return 0;
}
Back to top
View user's profile Send private message Send e-mail
VladSh



Joined: 29 Nov 2006
Posts: 2584
Location: Киев, Русь

PostPosted: Fri Aug 24, 2012 9:01 am    Post subject: Reply with quote

Instructor
Спасибо за ещё одну реализацию GetLinkUnderCaret, это как раз точно в ёлочку! Cool
Back to top
View user's profile Send private message Visit poster's website
KeepGoing



Joined: 15 Sep 2011
Posts: 37

PostPosted: Fri Aug 24, 2012 4:08 pm    Post subject: Reply with quote

Instructor wrote:

А так?

вот теперь - аккурат то, что надо! Very Happy
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian) All times are GMT
Goto page Previous  1, 2
Page 2 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group