сделать стартовой  |  добавить в избранное

   SciTE - редактор кода для программистов

Архив SciTE-форума


Автор: IvenGo, Отправлено:23:51 26-12-2007
Да я так смотрю это все можно было сделать без првязки к винде. Атакими методами
>>явно не задан цвет символов и фона, то эти параметры берутся из настроек Windows
Любую прогу испортить можно
Автор: mozers, Отправлено:09:23 27-12-2007
IvenGo
Если тебе какая то из доработок не нужна, то это не значит что она не нужна всем.
Кроме этого момента, на который ты обратил внимание, есть еще уйма различных вещей (да хотя бы то же многоуровневое меню Tools) которые в нынешней реализации под *nix даже не компилятся.
Как сказал классик - "Дело спасения утопающих - дело рук самих утопающих", поэтому те кто заинтересован в том чтобы сборка работала в линухах - пусть сам и пишет (или пользуется оригинальной) и не трындит понапрасну.
Автор: IvenGo, Отправлено:15:29 27-12-2007
Тогда просьба
1. Написать в шапке SciTE 1.75 .54Ru-Board Edition (только для Windows!!!!)[Сборка 03.12.2007] дабы не путать людей. В мире существует не только винда.
Автор: Fraerok, Отправлено:22:52 30-12-2007
У меня Каспер показывает:

Цитата:
обнаружено: троянская программа Trojan-Downloader.JS.gen (модификация)    Файл: SciTE_Setup.exe//data.rar/abbrev\jscript.abbrev

Автор: dB6, Отправлено:01:26 31-12-2007
Fraerok
http://forum.ru-board.com/topic.cgi?forum=5&topic=3215&start=1620#3
и
http://forum.ru-board.com/topic.cgi?forum=5&topic=3215&start=1880#14

Ну и...
Поздравляю вас всех с Новым годом!!! Приятно встретить и хорошо провести!!!

Автор: usr721, Отправлено:16:39 04-01-2008
Как сделать чтобы этот редактор автоматом правильно определял кодировку при открытии? Есть файл js в UTF8, к примеру notepad2 и PSPad правильно определяют, но scite нет (ставит win1251)
Автор: dB6, Отправлено:18:00 04-01-2008
usr721
Никак.
Автор: usr721, Отправлено:18:25 04-01-2008
только думал присмотреться к редактору, жаль
Автор: mozers, Отправлено:20:51 04-01-2008
usr721 dB6
Только что открыл в SciTE текстовый файл, сохраненный в кодировке 65001 (UTF-8). Открылся замечательно (переключать вручную через меню Файл - Кодировка не пришлось).
Подумал, что наверное помог скрипт VladVRO... Ан - нет - и без этого скрипта открывает как надо, только в строке статуса [UTF-8 ?] (поскольку тут VladVRO сомневается), а со скриптом - однозначно [UTF-8].
usr721
Если самостоятельно не получится - пришли мне на mozers(собака)mail.ru этот файлик - погляжу...
Автор: usr721, Отправлено:22:22 04-01-2008
Вообще не уверен что такое происходит только с utf8, просто это были первые файлы что я запустил этим редактором (не хотелось бы на каждую кодировку по скрипту юзать ), хотя думаю раз многие пользуются редактором, то с ним все в порядке, просто мне не повезло
Автор: mozers, Отправлено:12:49 06-01-2008
Очень прошу поучаствовать ВСЕХ в процессе обсуждения новой документации по SciTE.
Это - не просто очередной перевод, это попытка проверить работоспособность всех заявленных фич и изложить их понятным, человеческим языком.
Уверяю вас, что КАЖДЫЙ совершит массу весьма полезных для себя открытий, лишь только перечитав текст
Очень надеюсь на встречу с вами в этом топике.
Автор: rank1, Отправлено:16:08 07-01-2008
Всем привет! Я программист-скриптовик. Без Scite мне бы жилось очень тяжко))
Тут начал заниматься скриптописательством и возникли вопросы.

1. У нас АБС в банке поддерживает #include в vbs скриптах, поэтому хотел написать скрипт, который открыват все инклуды, связанные с фалом.

function openAllIncludes()
    local itt = 0;
    ch=""
    while itt < editor.LineCount do --iterate through each line
        line = editor:GetLine(itt);
        if line then
                x = string.gfind(line,'#include%s*"([%w%p]*)"')()
                if x then
                     print (x)
                     ch = ch..'scite.Open("D:/Program Files/SciTE/tools/'..x..'");'
                end
        end
        itt = itt + 1;
    end
    dostring(ch);
end
openAllIncludes()

Приходится извращаться через Dostring, потому что если ставлю просто Scite.Open в ветке - открываетс только первый файл и скрипт останавливается. А если пакетом выполнять несколько опенов - то все нормально. Кто-нибудь подскажет в чем проблема?

И второй скрипт ваял для конвертации sql запроса в vb строку

function sql2vb()
        --strSql = editor:GetSelText();
        strSql = editor:GetText();
        if strSql == "" then
            os.msgbox("Не выбрана область выделения Selection","Ошибка!",48);
            return 0;
        end
        local strVb = string.gsub(strSql,'%$(%w+)%$','" & %1 & "');
        strVb = string.gsub(strVb,'[\r\n]+',' " & _ \r\n"')
        strVb = '"'..strVb ..'"';
        --editor:ReplaceSel(strVb);
        editor:SetText(strVb);
        props["scite.lexer.name"] = 'vbscript';
        --scite.Open("")
        --editor:SetText(strVb);
--props["scite.lexer.name"] = 'vbscript';
end
sql2vb();

Проблема в том что лексер не устанавливается в vb если открывать новое окно - что через Editor:lexername что через проперти. И если делать замену в одном окне - то лексер меняется только если он изначально стоял отличным от Text.
Автор: mozers, Отправлено:01:19 08-01-2008
rank1
Поздавляю с первым постом
По первому вопросу:
scite.Open действительно открывает один файл и скрипт останавливается.
Имхо - баг SciTE. Надо исправлять в исходниках...
Пока я предлагаю такой вариант:include.lua
Код:
[no]-- Вставить в редактор[/no]
[no]-- Сохранить под именем include.lua[/no]
[no]-- Запустить по F5[/no]

for i = 0, editor.LineCount - 2 do
local line = editor:GetLine(i)
if string.len(line) > 0 then
local filename, count = string.gsub(line, [no]'^#include%s"([%w%p]*)"'[/no], [no]"%1"[/no])
if count ~= 0 then
filename = props[[no]"SciteDefaultHome"[/no]]..[no]"\\tools\\"[/no]..filename
print(filename)
local scite = props[[no]"SciteDefaultHome"[/no]]..[no]"\\scite.exe"[/no]
os.run([no]'"'[/no]..scite..[no]'" -check.if.already.open=1 "'[/no]..filename..[no]'"'[/no])
end
end
end

[no]--[[[/no]
[no]Строчки для тестирования (в сборке эти файлы есть - откроются):[/no]
[no]#include "MoveLines.lua"[/no]
[no]#include "ChangeCase.lua"[/no]
[no]#include "SortText.lua"[/no]
[no]]][/no]
Данный код внедрен в форум с помощью скрипта vladvro

Цитата:
Приходится извращаться через Dostring
Ну ты и изобретатель!



Добавлено:
Насколько я понял твой второй вопрос, все что тебе нужно - принудительно сменить подсветку текущего файла на SQL.
Это можно сделать с помощью такой функции:
Код:
local function SetLanguage(lng_name)
local i = 0
for _,name,_ in string.gfind(props[[no]"menu.language"[/no]], [no]"([^|]*)|([^|]*)|([^|]*)|"[/no]) do
if name == lng_name then
local IDM_LANGUAGE = 1400 [no]-- constant from SciTE.h[/no]
scite.MenuCommand(IDM_LANGUAGE + i)
return
end
i = i + 1
end
end
Данный код внедрен в форум с помощью скрипта vladvro
А твои варианты не проходят потому что и scite.lexer.name и editor.Lexer позволяют только прочитать текущие установки.

Добавлено:
Хотя можно еще сохранить преобразованный файл с расширением sql и подсветка сменится автоматом.
Автор: rank1, Отправлено:20:10 08-01-2008
Нет мне как раз нужно чтобы VB подсветка была

Исходный код:

Код:
Select
Номер,
Имя
from Счет
where ДатаОткрытия = [no]'$dDate$'[/no]
Данный код внедрен в форум с помощью скрипта vladvro

Преобразованный:

Код:
[no]"Select "[/no] & _
[no]"Номер, "[/no] & _
[no]"Имя "[/no] & _
[no]"from Счет "[/no] & _
[no]"where ДатаОткрытия = '"[/no] & dDate & [no]"' "[/no]
Данный код внедрен в форум с помощью скрипта vladvro

А про LexerName я где-то в заметках читал - что Scitr вроде как поддерживает теперь не только чтение но и установку лексера.

Проблему решил пока так:

Код:
function sql2vb()
props[[no]'default.file.ext'[/no]]=[no]'.bas'[/no]
local strSql = editor:GetText();
if strSql == [no]""[/no] then
os.msgbox([no]"Нет SQL текста"[/no],[no]"Ошибка!"[/no],48);
return 0;
end
local strVb = string.gsub(strSql,[no]'%%$'[/no],[no]'" & %1 & "'[/no]);
strVb = string.gsub(strVb,[no]'[\r\n]+'[/no],[no]' " & _ \r\n"'[/no])
strVb = [no]'"'[/no]..strVb ..[no]'"'[/no];
scite.Open([no]""[/no])
editor:SetText(strVb);
[no]--props["scite.lexer.name"] = 'vb';[/no]
end
sql2vb();
Данный код внедрен в форум с помощью скрипта vladvro

props['default.file.ext']='.bas' - просо ставлю это св-во

Автор: mozers, Отправлено:13:20 10-01-2008
rank1
Цитата:
Нет мне как раз нужно чтобы VB подсветка была
C помощью предложенной мной процедуры можно махом установить ЛЮБУЮ подсветку (лишь бы она была в меню "Подсветка").
Что же касается этой доработки:
Цитата:
[GetLexerLanguage] (Автор: Дмитрий Маслов)
Добавлено сообщение к Scitilla позволяющее получить имя текущего лексера:
Теперь editor.LexerLanguage - позволяет как установить лексер, так и получить текущий
то простой эксперемент показывает:
Код:
editor.LexerLanguage = "hypertext"
print (editor.LexerLanguage)
что процедурка к сожалению меняет только значение переменной editor.LexerLanguage, не переключая при этом подсветку синтаксиса

Автор: BioInfo, Отправлено:16:39 10-01-2008

Цитата:
процедурка к сожалению меняет только значение переменной editor.LexerLanguage, не переключая при этом подсветку синтаксиса

Я дорабатывал только в сторону извлечения имени лексера из этой штуки, так что похоже что это баг, проверь, плиз, в исходном SciTE тоже не работает?
Автор: mozers, Отправлено:18:26 10-01-2008
BioInfo
Да. Ты - прав. Я немного ошибся.
Оригинальный SciTE молча выполняет строку
Код:
editor.LexerLanguage = "hypertext"
(при этом подсветка никак не меняется).
А на строке
Код:
print (editor.LexerLanguage)
Выдает ошибку:
Код:
C:\TEMP\0.lua:2: Pane function / readable property / indexed writable property name expected
>Lua: error occurred while processing command

Т.е. ты сделал действительно только чтение этого параметра. А запись в него всегда была.
Правда, в комплекте с чем ее бы использовать, чтобы увидеть своими глазами что лексер сменился - неясно...
Автор: rank1, Отправлено:13:01 11-01-2008
Хочу поделиться со всеми VBшниками способом выдирания деклараций для api файлов.
1. Запускаем Excel
2. Добавляем 2 модуля
Модуль1

Код:
Option Explicit
Declare Function SendMessage Lib [no]"user32.dll"[/no] _
Alias [no]"SendMessageA"[/no] _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
wParam As Any, _
lParam As Any) _
As Long

Declare Function FindWindow Lib [no]"user32.dll"[/no] Alias [no]"FindWindowA"[/no] _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As Long

Declare Function FindWindowEx Lib [no]"user32.dll"[/no] _
Alias [no]"FindWindowExA"[/no] _
(ByVal hParent As Long, _
ByVal hChild As Long, _
ByVal lpszClassname As String, _
ByVal lpszWindow As String) _
As Long
Private Declare Sub Sleep Lib [no]"kernel32"[/no] (ByVal dwMS As Long)
Public Const WM_SETTEXT = &HC
Private Const WM_GETTEXT = &HD
Declare Function GetKeyState Lib [no]"user32"[/no] (ByVal nVirtKey As Long) As Integer
Const VK_CONTROL As Integer = &H11
Sub reader()
Dim hw
hw = InputBox([no]"GetHwnd"[/no], [no]"Type captured hwnd of F2 window"[/no], Empty)
If Trim(hw) = [no]""[/no] Then Exit Sub
Dim hwnd As Long: hwnd = CLng([no]"&H"[/no] & hw)
Dim pwd1 As String * 1024
Dim pwd2 As String * 1024
Dim s1, s2
Dim h As Scripting.Dictionary
Set h = New Scripting.Dictionary

While Not GetKeyState(VK_CONTROL) < 0
DoEvents
Call SendMessage(hwnd, WM_GETTEXT, 1024, ByVal pwd1)
s1 = TrimNull(pwd1)
Sleep 20 [no]'50[/no]
Call SendMessage(hwnd, WM_GETTEXT, 1024, ByVal pwd2)
s2 = TrimNull(pwd2)
If s1 = s2 Then
h(Replace(Replace(s1, Chr(10), [no]""[/no]), Chr(13), [no]"<13_10>"[/no])) = 1
End If
Application.Caption = Replace(Replace(s1, Chr(10), [no]""[/no]), Chr(13), [no]"<13_10>"[/no])
Wend
Dim t As String, k
For Each k In h.Keys
t = t & k & Chr(13)
Next k
data2Notepad CStr(t)
End Sub
Public Function TrimNull(startstr As String) As String
Dim pos As Integer
pos = InStr(startstr, Chr$(0))
If pos Then
TrimNull = Left$(startstr, pos - 1)
Exit Function
End If
TrimNull = startstr
End Function
Данный код внедрен в форум с помощью скрипта vladvro

Модуль2:

Код:
Option Explicit
Public Const GW_HWNDNEXT = 2

Public Declare Function GetParent Lib [no]"user32"[/no] (ByVal hwnd As Long) As Long
Public Declare Function GetWindow Lib [no]"user32"[/no] (ByVal hwnd As Long, _
ByVal wCmd As Long) As Long
[no]'Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _[/no]
[no]' (ByVal lpClassName As String, ByVal lpWindowName As String) As Long[/no]
Public Declare Function GetWindowText Lib [no]"user32"[/no] Alias [no]"GetWindowTextA"[/no] _
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetWindowThreadProcessId Lib [no]"user32"[/no] _
(ByVal hwnd As Long, lpdwprocessid As Long) As Long

Function ProcIDFromWnd(ByVal hwnd As Long) As Long
Dim idProc As Long
GetWindowThreadProcessId hwnd, idProc
ProcIDFromWnd = idProc
End Function

Function GetWinHandle(hInstance As Long) As Long
Dim tempHwnd As Long
[no]' Grab the first window handle that Windows finds:[/no]
tempHwnd = FindWindow(vbNullString, vbNullString)

[no]' Loop until you find a match or there are no more window handles:[/no]
Do Until tempHwnd = 0
[no]' Check if no parent for this window[/no]
If GetParent(tempHwnd) = 0 Then
[no]' Check for PID match[/no]
If hInstance = ProcIDFromWnd(tempHwnd) Then
[no]' Return found handle[/no]
GetWinHandle = tempHwnd
[no]' Exit search loop[/no]
Exit Do
End If
End If
[no]' Get the next window handle[/no]
tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT)
Loop
End Function

Sub data2Notepad(TextToSend As String)
Dim hInst As Long [no]' Instance handle from Shell function.[/no]
Dim hWndApp As Long [no]' Window handle from GetWinHandle.[/no]
Dim hwnd As Long

hInst = Shell([no]"notepad.exe"[/no], vbNormalFocus)
hWndApp = GetWinHandle(hInst)
If hWndApp <> 0 Then
hwnd = FindWindowEx(hWndApp, 0, [no]"Edit"[/no], vbNullString)
If hwnd <> 0 Then
Call SendMessage(hwnd, WM_SETTEXT, ByVal 0&, ByVal TextToSend)
Else
Err.Raise vbObjectError + 1, , [no]"Can't find notepad Edit control"[/no]
End If
Else
Err.Raise vbObjectError + 1, , [no]"Can't find notepad"[/no]
End If
End Sub



Данный код внедрен в форум с помощью скрипта vladvro

3 Загружаем бесплатный inqsoft window scanner
http://kickme.to/inqsoft
4 В VBA среде подключаем нужные библиотеки типов в меню References (описания объектов этих библиотек будем грабить)
5 Нажимаем F2 и сканером берем хендл самого нижнего подокошка бравзера объектов.
6 Запускаем макрос reader
7 Вводим в инпутбокс хендл нижнего подокошка выдранный inq scanner'ом
8 Ставим курсор на первый выдираемый класс в Classes, и держа стрелку вниз бежим по всем его членам. Так делаем для всех интересующих нас класов.
9 Нажимаем Ctrl+q - и в нотпаде открываются выграбленные описания.
10 Копируем их в Ворд, через Replace и редактирование убираем все что нам не нужно -
<13_10> заменяем на ^13, убираем ненужные описания, и получившиеся декларации засовываем в VB.api

Добавлено:
Еще есть идейка написать скрипт для скайта, который abbrev файл преобразовывает в файл replace.dat для PuntoSwitcher. Скрипт конвертирует скайтовские аббревы в пунтосвитчеровские, которые становятся доступными для использования в любом Windows приложении - в любом редакторе и в любой среде разработки либо по клавиатуре либо через список быстрой вставки. Такой скрипт есть у меня для Экселя, - он позволяет любую область листа скинуть в PuntoSwitcher и производить автоввод значений в любом приложении. По этому же принципу можно написать конвертер аббревов и скрипт скидывающий все строки текущего файла в replace.dat. Формат replace.dat текстовый и очень простой.
Автор: BioInfo, Отправлено:12:13 12-01-2008
rank1

Цитата:
Еще есть идейка написать скрипт для скайта, который abbrev файл преобразовывает в файл replace.dat для PuntoSwitcher

Хорошая мысля. Правда лично мне не нужно, по мне чем меньше самодеятельности у этого PuntoSwitcher тем лучше...
Вот ни как не могу подружить его с редактором C++, приходится отключать

З.Ы. Для вставки больших кусков кода используйте тэг [ more ]
Подробнее здесь
Автор: mozers, Отправлено:19:00 13-01-2008
rank1
Цитата:
Хочу поделиться со всеми VBшниками способом выдирания деклараций для api файлов
Сильно, конечно Я вообще уважаю тех, кто самостоятельно пытается изобретать велосипед. Иногда получается неплохо...
В даннос случае, я бы посоветовал воспользоваться готовыми приложениями, коих в инете - немало. Например TLB Tools или ActiveX Documenter.
Еще вариант - написать для этого дела самодостаточный скрипт, на вход которого подается название интересующего нас класса, а на выходе получается текст из его свойств и методов. За основу можно взять весьма недурное HTML приложение Object Browser.



1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17 / 18 / 19 / 20 / 21 / 22 / 23 / 24 / 25 / 26 / 27 / 28 / 29 / 30 / 31 / 32 / 33 / 34 / 35 / 36 / 37 / 38 / 39 / 40 / 41 / 42 / 43 / 44 / 45 / 46 / 47 / 48 / 49 / 50 / 51 / 52 / 53 / 54 / 55 / 56 / 57 / 58 / 59 / 60 / 61 / 62 / 63 / 64 / 65 / 66 / 67 / 68 / 69 / 70 / 71 / 72 / 73 / 74 / 75 / 76 / 77 / 78 / 79 / 80 / 81 / 82 / 83 / 84 / 85 / 86 / 87 / 88 / 89 / 90 / 91 / 92 / 93 / 94 / 95 / 96 / 97 / 98 / 99 / 100 / 101 / 102 / 103 / 104 / 105 / 106 / 107 / 108 / 109 / 110 / 111 / 112 / 113 / 114 / 115 / 116 / 117 / 118 / 119 / 120 / 121 / 122 / 123 / 124 / 125 / 126 / 127 / 128 / 129 / 130 / 131 / 132 / 133 / 134 / 135 / 136 / 137 / 138 / 139 / 140 / 141 / 142 / 143 / 144 / 145 / 146 / 147 / 148 / 149 / 150 / 151 / 152 / 153 / 154 / 155 / 156 / 157 / 158 / 159 / 160 / 161 / 162 / 163 / 164 / 165 / 166 / 167 / 168 / 169 / 170 / 171 / 172 / 173 / 174 / 175 / 176 / 177 / 178 / 179 / 180 / 181 / 182 / 183 / 184 / 185 / 186 / 187 / 188 / 189 / 190 / 191 / 192 / 193 / 194 / 195 / 196 / 197 / 198 / 199 / 200 / 201 / 202 / 203 / 204 / 205 / 206 / 207 / 208 / 209 / 210 / 211 / 212 / 213 /
SciTE © 2004 - 2011