hotkey for text margins etc -- a "writer's script"

English main discussion
  • Author
  • Message
Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

assigned it to a hotkey
You assigned hotkey in HotKey plugin or in Scripts plugin? In any case that plugin should be setup for autoload.

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

martz

Try to understand

Script worked before you changed the names of schemes?

Click ALT+P and check:
Script::Main and Coder::HighLight is enabled (checked)?

Assign a keyboard shortcut through Scripts plugin setup (double click on Script::Main)
Image

Offline
Posts: 19
Joined: Tue Apr 19, 2011 12:50 pm

Post by martz »

Now it works. Great, thanks :)

Since we're "at it", two more questions though:

1. Is it possible to change the location of AkelFiles folder?

(Explanation: to have one AP instance always in "writing" mode and another in "normal" mode, I'm using two different .exe and .ini files -- but would be nice if these "different programs" shared all the scripts, plugins etc. Because as for now, I have to manually synchronize any changes related to plugs/scripts.)

2. Can one also somehow change the title of AkelPad window? Ie to have a "AkelPad Notes" and a "AkelPad Writing"? (That's handy for Alt-Tabbing in Windows :))

Thanks,
M.
Last edited by martz on Sat Aug 20, 2011 10:08 pm, edited 1 time in total.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

martz wrote:2. Can one also somehow change the title of AkelPad window? Ie "AkelPad Notes" and "AkelPad Writing"?
You can do it by the script SetWindowTitle.js:

Code: Select all

var sWndTitle = "AkelPad Notes";
var hMainWnd  = AkelPad.GetMainWnd();
var lpText;

if ((hMainWnd) && (lpText = AkelPad.MemAlloc((sWndTitle.length + 1) * _TSIZE)))
{
  AkelPad.MemCopy(lpText, sWndTitle, _TSTR);
  AkelPad.SystemFunction().Call("user32::SetWindowText" + _TCHAR, hMainWnd, lpText);
  AkelPad.MemFree(lpText);
}

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

KDJ, your code can be much simpler - only one statement.

Code: Select all

AkelPad.SystemFunction().Call("user32::SetWindowText" + _TCHAR, AkelPad.GetMainWnd(), "AkelPad Notes")

Offline
Posts: 19
Joined: Tue Apr 19, 2011 12:50 pm

Post by martz »

This is excellent, guys. Thank you again!

(Btw, I already embedded a different color icon into one of my AkelPad.exe files, so now it's really comfy to switch between the "different applications".)

So, as for now, I've only got one slight annoyance. When the whole screen is already filled with text and I continue typing, then the caret stays on the very bottom line of the screen. In the long run this is inconvenient for the eyes. Hence, could a script:

a) Add customizable top and bottom margins to the full screen window or
b) As a workaround, enable a "page break". That is, after reaching the bottom of the screen, the script would always empty the screen and I could start typing from the top line of the window again.

I think (and hope) not only the "article writers" but also coders would benefit from additions like these.

Thanks for any thoughts,
AP is an awesome tool,
M.
Last edited by martz on Sun Aug 21, 2011 11:15 am, edited 1 time in total.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

FeyFre wrote:KDJ, your code can be much simpler - only one statement.

Code: Select all

AkelPad.SystemFunction().Call("user32::SetWindowText" + _TCHAR, AkelPad.GetMainWnd(), "AkelPad Notes")
Indeed, it works.
But, the description on msdn shows, that the second argument of SetWindowText() is of type LPCTSTR - a pointer to the string.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

But, the description on msdn shows, that the second argument of SetWindowText() is of type LPCTSTR - a pointer to the string.
Yes, and Call method automatically detects argument as string and converts it internally into LPCSTR representation.(This feature was introduced a while ago into Scripts plugin)

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

FeyFre
Well, yes, but in SendMessage() method can not use a string, it must be a pointer.

Code: Select all

AkelPad.SendMessage(AkelPad.GetMainWnd(), 0x000C /*WM_SETTEXT*/, 0, "AkelPad Notes");
generates a data type mismatch error.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

KDJ wrote:Well, yes, but in SendMessage() method can not use a string, it must be a pointer.
I think, it would be good to improve SendMessage(). :)

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Infocatcher, no, it would not. :(

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

Post by VladSh »

martz wrote:So, as for now, I've only got one slight annoyance. When the whole screen is already filled with text and I continue typing, then the caret stays on the very bottom line of the screen. In the long run this is inconvenient for the eyes.
While, with some reservations, you can try the to Scroll-plugin, see the description of the Scroll::Settings-function for call an external in plug-in documentation.
I added the proposal to expand the functionality of the plug-in topic.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

martz wrote:a) Add customizable top and bottom margins to the full screen window...
This is possible with AEM_SETRECT, but maybe next variant will be more suitable.
martz wrote:b) As a workaround, enable a "page break". That is, after reaching the bottom of the screen, the script would always empty the screen and I could start typing from the top line of the window again.
"Next variant" :) Add new shortcut in Hotkeys plugin:
Name: EnterNoscroll
Command: Call("Scroll::Settings", 5)
Hotkey: Enter or Ctrl+Enter

P.S. of course Scroll plugin must be installed.
Infocatcher wrote:
KDJ wrote:Well, yes, but in SendMessage() method can not use a string, it must be a pointer.
I think, it would be good to improve SendMessage(). :)

Code: Select all

oSys.Call("user32::SendMessage" + _TCHAR, hWndFind, 0x143 /*CB_ADDSTRING*/, 0, "12345");

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Instructor wrote:

Code: Select all

oSys.Call("user32::SendMessage" + _TCHAR, hWndFind, 0x143 /*CB_ADDSTRING*/, 0, "12345");
Yes, but why not make a similar improvement in SendMessage() ?

Offline
Posts: 19
Joined: Tue Apr 19, 2011 12:50 pm

Post by martz »

Instructor wrote:
martz wrote:b) As a workaround, enable a "page break". That is, after reaching the bottom of the screen, the script would always empty the screen and I could start typing from the top line of the window again.
"Next variant" :) Add new shortcut in Hotkeys plugin:
Name: EnterNoscroll
Command: Call("Scroll::Settings", 5)
Hotkey: Enter or Ctrl+Enter

P.S. of course Scroll plugin must be installed.
Hmm, this doesn't do the trick for me. Instead it shows me the beginning of the file (line 1).

How would you implement this with AEM_SETRECT?

Thanks a bunch,
M.
Post Reply